home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / general / modelers / geomview / source.lha / Geomview / include / geom.h < prev    next >
C/C++ Source or Header  |  1993-02-15  |  5KB  |  133 lines

  1. /* Copyright (c) 1992 The Geometry Center; University of Minnesota
  2.    1300 South Second Street;  Minneapolis, MN  55454, USA;
  3.    
  4. This file is part of geomview/OOGL. geomview/OOGL is free software;
  5. you can redistribute it and/or modify it only under the terms given in
  6. the file COPYING, which you should have received along with this file.
  7. This and other related software may be obtained via anonymous ftp from
  8. geom.umn.edu; email: software@geom.umn.edu. */
  9.  
  10. /* Authors: Charlie Gunn, Stuart Levy, Tamara Munzner, Mark Phillips */
  11.  
  12. #ifndef GEOMDEF
  13. #define GEOMDEF
  14.  
  15.  
  16. #include "handle.h"
  17. #include "3d.h"
  18. #include "create.h"
  19.  
  20.  
  21. #ifndef __cplusplus
  22. typedef struct Geom        Geom;        /* Complete OOGL object */
  23. typedef struct GeomClass    GeomClass;    /* Virtual func tbl for Geom */
  24. typedef struct GeomIter        GeomIter;    /* opaque iteration handle */
  25. #else
  26. struct Geom; struct GeomClass; struct GeomIter;
  27. #endif
  28.  
  29. extern char    *GeomName( Geom *obj );
  30. extern GeomClass *GeomMethods( Geom * );
  31. extern Geom    *GeomMessage( Geom *obj, int ac, char *av[] );
  32. extern Geom    *GeomCopy( Geom *obj );
  33. extern Geom    *GeomCreate( char *classname, ... );
  34. extern Geom    *GeomCCreate( Geom *existing_value, GeomClass *Class, ... );
  35. extern void    GeomDelete( Geom *obj );
  36. extern Geom    *GeomLoad( char *name );
  37. extern Geom    *GeomFLoad( FILE *inf, char *fname ); /* name for errs & type-guessing, may be NULL */
  38. extern int    GeomFLoadEmbedded( Geom **obj, Handle **handlep, FILE *inf, char *fname );
  39. extern int    GeomStreamIn( Pool *, Handle **handlep, Geom **geomp );
  40. extern int    GeomStreamOut( Pool *, Handle *h, Geom *g );
  41. extern Geom    *GeomSave( Geom *obj, char *name );
  42. extern Geom    *GeomFSave( Geom *obj, FILE *outf, char *fname );
  43. extern Geom    *GeomFSaveEmbedded( Geom *obj, Handle *handle, FILE *inf, char *fname );
  44. extern void    GeomReplace( Geom *parent, Geom *newchild );
  45. extern Geom    *GeomEvert( Geom *obj );
  46. extern Geom    *GeomBound( Geom *obj, Transform T );
  47. extern Geom    *GeomBoundSphere( Geom *obj, Transform T, int space );
  48. extern Geom    *GeomEval( Geom *obj );
  49. extern Geom    *GeomDice( Geom *obj, int nu, int nv );
  50. extern Geom    *GeomSubdivide( Geom *obj );
  51. extern Geom    *GeomPosition( Geom *obj, Transform T );
  52. extern Geom    *GeomTransform( Geom *obj, Transform T );
  53. extern Geom    *GeomTransformTo( Geom *obj, Transform T );
  54.  
  55. extern int    GeomSet( Geom *g, /* int attr, */ ... /* , CR_END */ );
  56. extern int    GeomGet( Geom *g, int attr, void *attrp );
  57.  
  58. extern void    GeomHandleScan( Geom *g, int (*func)(), void *arg );
  59.  
  60. extern Geom    *GeomDraw( Geom *obj );    /* Using current mg context */
  61.  
  62.     /* Extensions.  These are roughly objective-C style.
  63.       * Extension-functions are named with ASCII strings; for efficiency,
  64.      * the library interface uses integer "selectors".  Typical usage:
  65.      * int sel = GeomNewMethod( "new_method_name", my_default_func );
  66.      *   to define a new method, and/or
  67.      * GeomDefineMethod( sel, PolyListMethods(), my_func_for_polylists );
  68.      * GeomDefineMethod( sel, InstMethods(), my_func_for_insts );
  69.      * ...
  70.      *   to define a new method & its behavior on various object types. Or:
  71.      * int sel = GeomMethodSel( "method_name" );
  72.      *   returns the selector of an already-defined extension.
  73.      *   (GeomMethodSel() returns 0 for undefined extensions).
  74.      * To use the new method:
  75.      *   result = GeomCall( sel, geom, ... );
  76.      */
  77.  
  78. typedef  void *GeomExtFunc( int sel, Geom *geom, va_list args );
  79.  
  80. extern int   GeomMethodSel( char *name );    /* name -> selector, or 0 */
  81. extern char *GeomMethodName( int sel );        /* selector -> name or NULL */
  82. extern int   GeomNewMethod( char *name, GeomExtFunc *defaultfunc );/* -> selector */
  83. GeomExtFunc *GeomSpecifyMethod( int sel, GeomClass *Class, GeomExtFunc *func );
  84.  
  85. extern void *GeomCall( int sel, Geom *geom, ... );
  86. extern void *GeomCallV( int sel, Geom *geom, va_list args );
  87.  
  88.     /* Notes:
  89.      * GeomMethodSel() returns the selector for a given extension; 0 = unknown.
  90.      * GeomMethodName() returns the string naming an extension; NULL = unknown.
  91.      * GeomNewMethod() returns the newly assigned selector.
  92.      * GeomSpecifyMethod() returns the old method function, or NULL if none.
  93.      * GeomCall() invokes a method function; if none was specified for that
  94.      *        object class, the method's default function is called.
  95.      * GeomCallV() takes a va_list rather than GeomCall's explicit param list.
  96.      */
  97.  
  98.     /* Iteration */
  99.             /* Iterate() flag bits: */
  100. #define SHALLOW    1    /* Shallow traversal */
  101. #define    DEEP    0    /* vs. Fully recursive */
  102. #define    TRANSFORMED 2    /* Fully flatten all Geom's */
  103. #define    INSTANCED 0    /* vs. Return Inst -> Geom's (saves copying data) */
  104. #define    RETAIN    4    /* Retain returned Geom's indefinitely */
  105. #define    DESTROY    0    /* vs. Destroy returned Geom's at next iteration step */
  106.  
  107. extern GeomIter *GeomIterate( Geom *root, int flags );
  108. extern Geom    *NextGeom( GeomIter * );
  109. extern int     NextTransform( GeomIter *, Transform T );
  110. extern void     DestroyIter( GeomIter * );
  111.  
  112.     /* Import/export */
  113. extern int     GeomUpdate( Geom *obj, int doImport );    /* Recursive bind */
  114.  
  115. /* to support compatibility with the old way of doing it */
  116. #define GeomScale(ggg, sx, sy, sz)    {    \
  117.     Transform t;                \
  118.     Tm3Scale(t, sz, sy, sz);        \
  119.     GeomTransform(ggg, t);     }
  120.  
  121. #define GeomTranslate(ggg, tx, ty, tz)    {    \
  122.     Transform t;                \
  123.     Tm3Translate(t, tz, ty, tz);        \
  124.     GeomTransform(ggg, t);     }
  125.  
  126. #define GeomRotate(ggg, aa, axis)    {    \
  127.     Transform t;                \
  128.     Tm3Rotate(t, aa, axis);            \
  129.     GeomTransform(ggg, t);     }
  130.  
  131.  
  132. #endif /*GEOMDEF*/
  133.